package org.megha.blog.example.part8;

public class MyMath {

	/**
	 * Calculates the average of the numbers provided.
	 *
	 * @param numbers the numbers to average over.
	 * @throws IllegalArgumentException if no numbers a specified
	 */
	public static double average(int... numbers) {
		// note the use of var-args above. java collapses all the arguments into an array
		if (numbers.length == 0) {
			throw new IllegalArgumentException("no numbers to average over!");
		}
		int sum = 0;
		for(int i : numbers) {
			sum = sum + i;
		}
		return ((double) sum) / numbers.length;
	}

	public static void main(String args[]) {

		// averaging works over any number of arguments
		System.out.println(MyMath.average(1, 2, 3, 7, 9, 10));
		System.out.println(MyMath.average(55, 77));
		System.out.println(MyMath.average(3));

		// but when it's called with no arguments, an unchecked exception is thrown.
		// ofcourse, we know about it already, so we have a try/catch block in place.
		// unchecked/runtime exceptions usually happen when some assumed condition, or
		// an api contract is not met by the programmer. eg passing in a null, where
		// null is not expected, or trying to lookup into an array beyond it's bounds.
		try {
			System.out.println(MyMath.average());
		} catch (IllegalArgumentException e) {
			System.out.println("Exception caught: " + e);
		}
		System.out.println("still running... :)");
	}
}

